/**
 * Copyright (C), 2001-2031, www.bosssof.com.cn
 * FileName: RoleService.java
 * Author: chen
 * Date: 2024/5/31 13:12
 * Description: * ${description}
 * History:
 * Date Author Version Desc
 * 2024-01-01 bosssoft 1.0.0 initialize this file
 */
package com.bosssoft.g1.service;

import com.bosssoft.g1.dto.*;
import com.bosssoft.g1.entity.Node;
import com.bosssoft.g1.entity.Role;
import com.bosssoft.g1.query.RoleQuery;
import com.bosssoft.g1.query.UserRoleQuery;
import com.github.pagehelper.PageInfo;
import org.springframework.transaction.annotation.Transactional;

import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * @className: RoleService
 * @description:
 * 解决什么问题：
 * 主要方法：
 * methodxx
 * 注意事项：
 * @author: chen
 * @date: 2024/5/31 13:12
 * @since 1.0
 */
public interface RoleService {
    /**
     * 返回所有角色信息
     * @param pageNum
     * @param pageSize
     * @return
     */
    PageInfo<RoleDTO> getAllRoles(Integer pageNum, Integer pageSize);
    /**
     * 新增角色
     * @param roleDTO
     * @return
     */
    Boolean addRole(@NotNull @Valid RoleDTO roleDTO);

    /**
     * 根据角色id删除单个角色
     * @param id
     * @return
     */
    Boolean deleteRoleById(@NotNull @Valid Long id);

    /**
     * 批量删除角色
     * @param roleDTO
     * @return
     */
    @Transactional
    Boolean batchDeleteRole(@NotEmpty @Valid List<RoleDTO> roleDTO);

    /**
     * 通过角色id查询角色
     * @param id
     * @return
     */
    RoleDTO queryRoleById( Long id);

    /**
     * name查询角色信息
     * @param name
     * @return
     */
    PageInfo<RoleDTO> queryRoles(int pageSize,int pageNum,String name);

    /**
     * 编辑角色
     * @param roleDTO
     * @return
     */
    Boolean updateRole(@NotNull @Valid RoleDTO roleDTO);

    /**
     * 通过角色id查询角色资源
     * @param id
     * @return
     */
    List<Node> queryRoleResourceByRoId(Long id);

    /**
     * 根据角色id查询角色公司
     * @param id
     * @return
     */
    List<CompanyDTO> queryRoleCompanyByRoId(Long id);

    /**
     * 分页返回所有用户信息
     * @param pageDTO
     * @return
     */
    PageInfo<UserDTO> queryUsers(@NotNull @Valid PageDTO pageDTO);

    /**
     * 给角色分配多个用户
     * @param userRoleDTO
     * @return
     */
    Boolean assignUserToRole(@NotNull @Valid UserRoleDTO userRoleDTO);

    /**
     * 根据角色查询用户资源树
     * @param userRoleQuery
     * @return
     */
    List<Node> queryUserResourceByRole(@NotNull @Valid UserRoleQuery userRoleQuery);

    /**
     * 获取公司对应的所有角色
     * @param companyId
     */
    PageInfo<Role> getCompanyRoleList(Long companyId, Integer pageNum, Integer pageSize);

    /**
     * 显示公司信息
     * @return
     */
    List<CompanyDTO> getAllCompanies();

    /**
     * 资源分配3——资源
     * @param roleResourceDTO
     */
    Boolean assignResourceToRole(@NotNull @Valid RoleResourceDTO roleResourceDTO);

    /**
     * 资源分配4——公司
     * @param roleCompanyDTO
     */
    Boolean assignCompanyToRole(@NotNull @Valid RoleCompanyDTO roleCompanyDTO);
}

